home *** CD-ROM | disk | FTP | other *** search
/ Aminet 43 / Aminet 43 (2001)(GTI - Schatztruhe)[!][Jun 2001].iso / Aminet / game / role / World.lha / source / verbs2.c < prev    next >
C/C++ Source or Header  |  2001-03-06  |  33KB  |  1,469 lines

  1. #include "parame.inc"
  2. #include "variab.h"
  3. #include "arrays.h"
  4.  
  5. /* World C Version 1.00 copyright 1987 J.D.McDonald 
  6.    Use as you like for non-commercial purposes, but please
  7.    leave this note, and document any changes you make as yours */
  8.  
  9. vpunch()
  10. {
  11.     int             result, spk;
  12.     result = 0;
  13.     if (dobjs[0] == SEED || dobjs[0] == SPHERE) {
  14.     result = 1;
  15.     return (result);
  16.     }
  17.     spk = 286;
  18.     if (dobjs[0] == LOUVER) {
  19.     if (loc == 98 || loc == 142) {
  20.         spk = 282;
  21.         obimpr[ZLOUVE] = 9;
  22.     } else
  23.             spk = 66;
  24.     } else if (dobjs[0] == GUARD) {
  25.     if (loc == guardl || loc == 171 || (chaset != 0 && chaset <= 9))
  26.         spk = 562;
  27.     else
  28.         spk = 561;
  29.     } else if (dobjs[0] == ROBOT || dobjs[0] == FERRET)
  30.     spk = 285;
  31.     else if (dobjs[0] == MARTIA && loc >= 27 && loc <= 51)
  32.     spk = 307;
  33.     else if (dobjs[0] == VINE && loc == 74 && (obimpr[ZVINE] & 56) == 8) {
  34.     spk = 306;
  35.     if (pct(33))
  36.         spk = 302;
  37.     else if (pct(50))
  38.         spk = 305;
  39.     else;
  40.     }
  41.     speak(spk);
  42.     return (result);
  43. }
  44.  
  45. vput()
  46. {
  47.     int             result, plce, zplce, spk, obj, cplce, xiobj, ioplce, ambig;
  48.     int             csize, cinsid, i, ncarrd, nweigh, kcarrd, kweigh;
  49.     int             z, size, weigh, plural;
  50.  
  51.     result = 0;
  52.     if ((prepdo == ON && prepio == 0) || (prepio == ON && iobj == ME)) {
  53.     prepio = 0;
  54.     prepdo = 0;
  55.     result = 1;
  56.     /* this results in calling vwear  */
  57.  
  58.     return (result);
  59.     }
  60.     if ((prepio == IN && iobj == BOWL) || prepdo == DOWN) {
  61.     /* call drop to put things in bowl  */
  62.  
  63.     if (prepdo == DOWN)
  64.         prepdo = 0;
  65.     result = 2;
  66.     return (result);
  67.     }
  68.     if (dobjs[0] == WATER && dobjs[1] == 0 && iobj == FUNNEL) {
  69.     result = 3;
  70.     return (result);
  71.     }
  72.     /* code for put latex on pole   */
  73.  
  74.     if (dobjs[0] == LATEX && (doadjs[0] == 0 || doadjs[0] == GOOEY)
  75.     && loc == 76 && prepio == ON && iobj == POLE &&
  76.     (obimpr[ZLATEX] & 56) == 8) {
  77.     if (allflg || dobjs[1] != 0) {
  78.         speak(48);
  79.         return (result);
  80.     }
  81.     itsher(ZLATEX, &plce);
  82.     if (plce == 0)
  83.         speak(66);
  84.     else {
  85.         obloc[ZLATEX] = 76;
  86.         obimpr[ZLATEX] = 25 + 320;
  87.         speak(75);
  88.     }
  89.     return (result);
  90.     }
  91.     /* putting things in machines   */
  92.  
  93.     if ((iobj == MACHIN || iobj == OPENIN || iobj == SLOT) &&
  94.     loc != 146) {
  95.     if (loc != 143 && loc != 156 && loc != 158 &&
  96.         loc != 160 && loc != 162)
  97.         speak(90);
  98.     else if (loc == 143) {
  99.         if (prepio != IN || allflg || dobjs[1] != 0
  100.         || dobjs[0] != CASSET || (doadjs[0] != 0 &&
  101.                       doadjs[0] != HUGE))
  102.         speak(48);
  103.         else {
  104.         itsher(ZCASSE, &zplce);
  105.         if (zplce <= 0)
  106.             speak(66);
  107.         else {
  108.             obloc[ZCASSE] = 0;
  109.             machst |= 16;
  110.             if (obimpr[RLIGHT] == 73 && (machst & 1) == 0 &&
  111.             (machst & 2) != 0) {
  112.             speak(399);
  113.             obimpr[RLIGHT] = 145;
  114.             obimpr[GLIGHT] = 145;
  115.             }
  116.         }
  117.         }
  118.     } else {
  119.         spk = 0;
  120.         if (prepio != IN || allflg || dobjs[1] != 0
  121.         || dobjs[0] != COIN)
  122.         spk = 48;
  123.         else {
  124.         obj = getobj(COIN, doadjs[0]);
  125.         if (obj < 0) {
  126.             speak(70);
  127.             return (result);
  128.         }
  129.         itsher(obj, &cplce);
  130.         if (cplce == 0)
  131.             spk = 66;
  132.         else if (loc == 156) {
  133.             if (obj != PCOIN)
  134.             spk = 93;
  135.             else {
  136.             spk = 512;
  137.             obloc[PCOIN] = 0;
  138.             obloc[BBALL] = 156;
  139.             }
  140.         } else if (loc == 158) {
  141.             if (obj != NCOIN)
  142.             spk = 93;
  143.             else {
  144.             spk = 513;
  145.             obloc[NCOIN] = 0;
  146.             obloc[NNEWS] = 158;
  147.             }
  148.         } else if (loc == 162) {
  149.             if (obj != CCOIN)
  150.             spk = 93;
  151.             else {
  152.             spk = 514;
  153.             obloc[CCOIN] = 0;
  154.             obloc[MMAP] = 162;
  155.             }
  156.         } else if (loc == 160)
  157.             gamble(obj);
  158.         else;
  159.         if (spk != 0)
  160.             speak(spk);
  161.         }
  162.     }
  163.     return (result);
  164.     }
  165.     spk = 0;
  166.     if ((prepio != IN || (prepio == IN && prepdo != 0)) && !
  167.     (prepio == ON &&
  168.      (iobj == ENLARG || iobj == TRAY) && loc == 143))
  169.     spk = 273;
  170.     else {
  171.     /* check on status of indirect object  */
  172.  
  173.     xiobj = getobj(iobj, ioadj);
  174.     if (xiobj <= 0)
  175.         spk = 90;
  176.     else if (obpprp[xiobj] / 2048 == 0 && xiobj != ZENLAR)
  177.         spk = 77;
  178.     else if (iobj == BUCKET && (obimpr[ZBUCKE] == 1033 || (
  179.            obloc[ZLATEX] == (2000 + ZBUCKE) && (obimpr[ZLATEX] & 56)
  180.                                    == 8)))
  181.         spk = 276;
  182.     else {
  183.         itsher(xiobj, &ioplce);
  184.         if (ioplce != 1 && ioplce != 2 && ioplce != 4)
  185.         spk = 91;
  186.     }
  187.     }
  188.     if (spk != 0) {
  189.     speak(spk);
  190.     return (result);
  191.     }
  192.     /* convert dobjs(i) (noun) to list of objects (pointers) */
  193.  
  194.     ambig = !cnvobj();
  195.     if (allflg)
  196.     getall();
  197.     csize = obpprp[xiobj] / 2048;
  198.     if (csize == 15)
  199.     csize = 70;
  200.     cinsid = 0;
  201.     for (i = 1; i <= MOVMAX; i++)
  202.     if (obloc[i] == 2000 + xiobj)
  203.         cinsid += (obw3[i] % 256);
  204.     burden(&ncarrd, &nweigh, &kcarrd, &kweigh);
  205.     if (obloc[ZKNAPS] == 1000 || obloc[ZKNAPS] == 3000)
  206.     nweigh += kweigh;
  207.     for (i = 0; i <= 29; i++) {
  208.     z = dobjs[i];
  209.     if (z == 0)
  210.         return (result);
  211.     if (obloc[z] == z + 2000)
  212.         continue;
  213.     itsher(z, &plce);
  214.     size = (obw3[z] % 256);
  215.     weigh = obw3[z] / 256;
  216.     plural = (obpprp[z] & 256) == 256;
  217.     if (allflg && (z > MOVMAX || obloc[z] == (2000 + xiobj)))
  218.         continue;
  219.     if (allflg || dobjs[1] != 0)
  220.         speak(odistb[z]);
  221.     if (z > MOVMAX) {
  222.         spk = odistb[z + 1] - 1;
  223.         if (plce != 4)
  224.         spk = 113;
  225.     } else if (obloc[z] == 2000 + xiobj) {
  226.         spk = 92;
  227.         if (plural)
  228.         spk = 191;
  229.     } else if (plce == 2) {
  230.         spk = 88;
  231.         if (plural)
  232.         spk = 194;
  233.     } else if (plce == 0) {
  234.         spk = 66;
  235.         if (plural)
  236.         spk = 185;
  237.     } else if ((plce == 4 || plce == 5) && z == ZWIRE && wirelc[0] != 0)
  238.         spk = 89;
  239.     else if ((plce == 4 || plce == 5) && z == ZCART &&
  240.          obloc[ZCART] == 2000 + RSLOT)
  241.         spk = 311;
  242.     else if (size + cinsid > csize) {
  243.         spk = 93;
  244.         if (plural)
  245.         spk = 192;
  246.     } else if ((nweigh + weigh > 125) && (xiobj == ZKNAPS &&
  247.                           obloc[z] != 1000 &&
  248.             (obloc[ZKNAPS] == 1000 || obloc[ZKNAPS] == 3000))) {
  249.         spk = 79;
  250.         if (plural)
  251.         spk = 188;
  252.     } else if (z == CFISH && obloc[z] ==
  253.            (2000 + PLBAG) && (obimpr[PLBAG] / 512 == 5))
  254.         spk = 76;
  255.     else if (z == ZLATEX && (obimpr[ZLATEX] & 56) == 8)
  256.         spk = 277;
  257.     else if (xiobj == RSLOT && !(z == ZCART || z == CCART))
  258.         spk = 351;
  259.     else if (iobj == FUNNEL) {
  260.         spk = 396;
  261.         if (xiobj == LFUNNE && z == ZMETOL)
  262.         machst |= 8;
  263.         if (xiobj == RFUNNE && z == ZHYPO)
  264.         machst |= 4;
  265.         obloc[z] = 0;
  266.     } else if (loc == 99 && z == ZSTATU
  267.            && obimpr[ZSEED] != 2 && obimpr[ZSEED] != 1)
  268.         spk = 405;
  269.     else if (loc == 86 && obloc[ZSEED] == 86 && !
  270.          (obloc[RPANT] == 3000 && obloc[RSHIRT] == 3000)) {
  271.         if (obloc[LPANT] == 3000 || obloc[GSHIRT] == 3000) {
  272.         if (daytim == 1)
  273.             speak(424);
  274.         else
  275.             speak(425);
  276.         } else {
  277.         if (daytim == 1)
  278.             speak(426);
  279.         else
  280.             speak(427);
  281.         }
  282.         if (obloc[LPANT] == 3000)
  283.         obloc[LPANT] = 0;
  284.         if (obloc[GSHIRT] == 3000)
  285.         obloc[GSHIRT] = 0;
  286.         vdead();
  287.         return (result);
  288.     } else {
  289.         if (obloc[z] == 2000 + RSLOT)
  290.         obimpr[ZSCREE] = 9;
  291.         obloc[z] = 2000 + xiobj;
  292.         nweigh += weigh;
  293.         cinsid += size;
  294.         /* special increment of descriptor pointer if obimpr has 4096 set */
  295.  
  296.         if (obimpr[z] / 4096 == 1)
  297.         obimpr[z] = (obimpr[z] & ~4096) + 8;
  298.         /* ~4096=167777 octal  */
  299.  
  300.         spk = 75;
  301.         if (z == ZLATEX && (obimpr[ZLATEX] & 56) == 24)
  302.         obimpr[ZLATEX] = 337;
  303.         if ((z == CCART || z == ZCART) && xiobj == RSLOT) {
  304.         obimpr[RSLOT] += 8192;
  305.         obimpr[ZSCREE] = 145;
  306.         } else if (iobj == RECESS && z == GDISC)
  307.         spk = 412;
  308.         else if (loc == 86 && z == ZSEED) {
  309.         if (daytim == 1)
  310.             spk = 428;
  311.         else
  312.             spk = 429;
  313.         } else if (xiobj == OCLIP && z == YROD)
  314.         spk = 526;
  315.         else if (xiobj == VCLIP && z == LMINER)
  316.         spk = 527;
  317.         else if (xiobj == YCLIP && z == YROD)
  318.         spk = 528;
  319.         else if (xiobj == BCLIP && z == BSAPPH)
  320.         spk = 529;
  321.         else;
  322.         if ((xiobj == YCLIP || xiobj == BCLIP) &&
  323.          obloc[YROD] == 2000 + YCLIP && obloc[BSAPPH] == 2000 + BCLIP) {
  324.         speak(spk);
  325.         spk = 531;
  326.         }
  327.     }
  328.     xindnt += 2;
  329.     speak(spk);
  330.     xindnt -= 2;
  331.     }
  332.     return (result);
  333. }
  334.  
  335. gamble(c)
  336.     int             c;
  337. {
  338.     int             rann, spk, x;
  339.     rann = qrand();
  340.     if (jackpo == 1) {
  341.     obloc[c] = 0;
  342.     spk = 515;
  343.     } else if (c != PCOIN) {
  344.     if (rann > 3750) {
  345.         spk = 516;
  346.         x = PCOIN;
  347.     } else if (rann > 3317) {
  348.         x = SCOIN;
  349.         spk = 517;
  350.     } else if (rann > 2212) {
  351.         x = CCOIN;
  352.         spk = 518;
  353.     } else if (rann > 1105) {
  354.         x = BCOIN;
  355.         spk = 519;
  356.     } else {
  357.         x = NCOIN;
  358.         spk = 520;
  359.     }
  360.     } else {
  361.     if (rann > 3276) {
  362.         spk = 521;
  363.         jackpo = 1;
  364.     } else if (rann > 2048) {
  365.         x = PCOIN;
  366.         spk = 516;
  367.     } else {
  368.         x = SCOIN;
  369.         spk = 517;
  370.     }
  371.     }
  372.     if (spk == 521) {
  373.     obloc[PCOIN] = 160;
  374.     obloc[SCOIN] = 160;
  375.     obloc[CCOIN] = 160;
  376.     obloc[BCOIN] = 160;
  377.     obloc[NCOIN] = 160;
  378.     bonus += 5;
  379.     } else {
  380.     obloc[c] = 0;
  381.     obloc[x] = 160;
  382.     }
  383.     speak(spk);
  384. }
  385.  
  386. vscrat()
  387. {
  388.     int             spk, plce;
  389.     if ((iobj != DIAMON && iobj != SAPPHI && iobj != KNIFE) || prepio != WITH)
  390.     spk = 196;
  391.     /* sapphire has no edge */
  392.  
  393.     else if (iobj == SAPPHI) {
  394.     itsher(BSAPPH, &plce);
  395.     if (plce == 0)
  396.         spk = 197;
  397.     else
  398.         spk = 198;
  399.     }
  400.     /*
  401.      * diamond cuts glass window but not vine names of window and glass plate
  402.      * are all mixed up  
  403.      */
  404.  
  405.     else if (iobj == DIAMON) {
  406.     itsher(ZDIAMO, &plce);
  407.     if (plce == 0)
  408.         spk = 199;
  409.     else if (dobjs[0] == WINDOW || dobjs[0] == GLASS) {
  410.         if (loc != 30 && loc != 42)
  411.         spk = 200;
  412.         else if (((obimpr[ZWINDO] / 8) % 8) != 0)
  413.         spk = 201;
  414.         else {
  415.         spk = 202;
  416.         obimpr[ZWINDO] = 145;
  417.         obloc[ZDIAMO] = 1000;
  418.         if (loc == 30)
  419.             obloc[PGLASS] = 42;
  420.         else
  421.             obloc[PGLASS] = 30;
  422.         }
  423.     } else if (dobjs[0] == VINE && loc == 74 && (obimpr[ZVINE] & 56) == 8)
  424.         spk = 306;
  425.     else
  426.         spk = 203;
  427.     } else {
  428.     itsher(ZKNIFE, &plce);
  429.     if (plce == 0)
  430.         spk = 89;
  431.     else if (dobjs[0] == WINDOW || dobjs[0] == GLASS)
  432.         spk = 309;
  433.     else if (dobjs[0] == VINE && loc == 74 && (obimpr[ZVINE] & 56) == 8)
  434.         spk = 305;
  435.     else
  436.         spk = 286;
  437.     }
  438.     speak(spk);
  439. }
  440.  
  441. vread()
  442. {
  443.     int             m, plce, n;
  444.     /* if it's light, read whatever is written on  */
  445.  
  446.     if (daytim == 0) {
  447.     speak(121);
  448.     return;
  449.     }
  450.     m = getobj(dobjs[0], doadjs[0]);
  451.     if (prepio == TO || m < 1 || (obpprp[m] & 16) != 16) {
  452.     speak(71);
  453.     return;
  454.     }
  455.     itsher(m, &plce);
  456.     n = (obimpr[m] / 64) % 8;
  457.     if (n == 0 || plce == 0)
  458.     speak(98);
  459.     else {
  460.     if (loc >= 153 && lpill == 1 && (m == MMAP || m ==
  461.                      NNEWS || m == NNOTE || m == TMACH))
  462.         n += 1;
  463.     speak(odistb[m] + n);
  464.     if (m == NNOTE && lpill == 1)
  465.         nreadx();
  466.     }
  467. }
  468.  
  469.     static   char   string[] = "  Large ship XX XX XX";
  470.  
  471. nreadx()
  472. {
  473.     int             l, n, m;
  474.     char            cnum[4];
  475.     l = dcombi;
  476.     n = (l & 31);
  477.     l = l / 32;
  478.     m = (l & 31);
  479.     l = l / 32;
  480.     numcvt(n, cnum);
  481.     string[19] = cnum[2];
  482.     string[20] = cnum[3];
  483.     numcvt(m, cnum);
  484.     string[16] = cnum[2];
  485.     string[17] = cnum[3];
  486.     numcvt(l, cnum);
  487.     string[13] = cnum[2];
  488.     string[14] = cnum[3];
  489.     linout(string, 21);
  490. }
  491.  
  492.  
  493.  
  494. vrobot()
  495. {
  496.     int             spk, vspk, dj, empty, i, bplce, gplce, tloc, iplce, ij, plce;
  497.     spk = 0;
  498.     vspk = 0;
  499.     if (dobjs[0] != 0)
  500.     dj = getrob(dobjs[0], doadjs[0]);
  501.     if (iobj != 0)
  502.     ij = getrob(iobj, ioadj);
  503.     empty = 1;
  504.     for (i = 1; i <= MOVMAX; i++)
  505.     if (obloc[i] == 2000 + ZROBOT)
  506.         empty = 0;
  507.     if (dobjs[1] != 0)
  508.     spk = 343;
  509.     else if (wrdnum[0] == TAKE || wrdnum[0] == HOLD) {
  510.     if (dobjs[0] == DISC && dj < 0) {
  511.         tloc = loc;
  512.         loc = obloc[ZROBOT];
  513.         itsher(GDISC, &gplce);
  514.         itsher(BDISC, &bplce);
  515.         loc = tloc;
  516.         if (gplce == 4)
  517.         gplce = 5;
  518.         if (bplce == 4)
  519.         bplce = 5;
  520.         if (loc == obloc[ZROBOT]) {
  521.         if (gplce == 1)
  522.             gplce = 5;
  523.         if (bplce == 1)
  524.             bplce = 5;
  525.         }
  526.         if (gplce != 5 && bplce != 5)
  527.         dj = 0;
  528.         else if (gplce == 5)
  529.         dj = GDISC;
  530.         else
  531.         dj = BDISC;
  532.     }
  533.     if (prepdo != 0 || prepio != 0 || allflg)
  534.         spk = 342;
  535.     else if (empty == 0)
  536.         spk = 343;
  537.     else if (dj < 0)
  538.         spk = 70;
  539.     else if (dj > MOVMAX || dj == 0)
  540.         spk = 344;
  541.     else {
  542.         tloc = loc;
  543.         loc = obloc[ZROBOT];
  544.         itsher(dj, &plce);
  545.         loc = tloc;
  546.         if (!(plce == 4 || plce == 5 || (plce == 1
  547.                                         && obloc[ZROBOT] == loc)))
  548.         spk = 420;
  549.         else if (obw3[dj] / 256 > 1 || (obw3[dj] & 255) > 2)
  550.         spk = 352;
  551.         else {
  552.         spk = 345;
  553.         obloc[dj] = 2000 + ZROBOT;
  554.         if (dj == ZINSEC && obimpr[ZINSEC] == 201)
  555.             obimpr[ZINSEC] = 209;
  556.         }
  557.     }
  558.     } else if (wrdnum[0] == DROP) {
  559.     if (dj < 0) {
  560.         if (dobjs[0] == DISC && obloc[GDISC] == 2000 + ZROBOT)
  561.         dj = GDISC;
  562.         else if (dobjs[0] == DISC && obloc[BDISC] == 2000 + ZROBOT)
  563.         dj = BDISC;
  564.         else;
  565.     }
  566.     if (prepdo != 0 || prepio != 0 || allflg)
  567.         spk = 342;
  568.     else if (dj < 0)
  569.         spk = 70;
  570.     else if (dj == 0)
  571.         spk = 344;
  572.     else if (obloc[dj] != 2000 + ZROBOT)
  573.         spk = 347;
  574.     else {
  575.         spk = 346;
  576.         obloc[dj] = obloc[ZROBOT];
  577.     }
  578.     } else if (wrdnum[0] == GIVE) {
  579.     if (dj < 0) {
  580.         if (dobjs[0] == DISC && obloc[GDISC] == 2000 + ZROBOT)
  581.         dj = GDISC;
  582.         else if (dobjs[0] == DISC && obloc[BDISC] == 2000 + ZROBOT)
  583.         dj = BDISC;
  584.         else;
  585.     }
  586.     if (obloc[ZROBOT] != loc)
  587.         spk = 443;
  588.     else if (prepdo != 0 || prepio != TO || allflg)
  589.         spk = 342;
  590.     else if (dj < 0)
  591.         spk = 70;
  592.     else if (dj == 0)
  593.         spk = 344;
  594.     else if (obloc[dj] != 2000 + ZROBOT)
  595.         spk = 347;
  596.     else {
  597.         spk = 444;
  598.         obloc[dj] = 1000;
  599.     }
  600.     } else if (wrdnum[0] == WASH || wrdnum[0] == QWATER) {
  601.     if (dobjs[0] == DISC && obloc[GDISC] == 2000 + ZROBOT)
  602.         dj = GDISC;
  603.     else if (dobjs[0] == DISC && obloc[BDISC] == 2000 + ZROBOT)
  604.         dj = BDISC;
  605.     else;
  606.     if (dj <= 0 || !((dj <= MOVMAX && (obloc[dj] == 2000 +
  607.               ZROBOT || obloc[dj] == obloc[ZROBOT])) || (dj > MOVMAX
  608.           && (obw3[dj] == obloc[ZROBOT] || obw4[dj] == obloc[ZROBOT]))))
  609.         spk = 344;
  610.     else {
  611.         if (wrdnum[0] == WASH) {
  612.         if (dj == GDISC && rvtim == 0)
  613.             spk = 414;
  614.         else if (dj == GDISC && rvtim == 1) {
  615.             spk = 410;
  616.             rvtim = 2;
  617.         } else
  618.             spk = 348;
  619.         } else
  620.         spk = 349;
  621.         if (loc == 74 && (obimpr[ZVINE] & 56) == 8 &&
  622.         dj == ZVINE) {
  623.         vspk = 1;
  624.         obimpr[ZVINE] = obimpr[ZVINE] + 8;
  625.         }
  626.     }
  627.     } else if (wrdnum[0] == TRANSL) {
  628.     if (dobjs[0] >= DEET && dobjs[0] <= STORAG)
  629.         spk = 354 - DEET + dobjs[0];
  630.     else if (dobjs[0] == CYGNAN || dobjs[0] == TERRAN)
  631.         spk = 362 - TERRAN + dobjs[0];
  632.     else
  633.         spk = 364;
  634.     } else if (wrdnum[0] == PUT) {
  635.     if (dobjs[0] == DISC && obloc[GDISC] == 2000 + ZROBOT)
  636.         dj = GDISC;
  637.     else if (dobjs[0] == DISC && obloc[BDISC] == 2000 + ZROBOT)
  638.         dj = BDISC;
  639.     else;
  640.     if (dobjs[0] == DISC && obloc[GDISC] != 2000 + ZROBOT &&
  641.         obloc[BDISC] != ZROBOT)
  642.         spk = 347;
  643.     else if (prepdo != 0 || prepio != IN || allflg)
  644.         spk = 342;
  645.     else if (dj < 0 || ij < 0)
  646.         spk = 70;
  647.     else if (dj == 0 || ij == 0)
  648.         spk = 344;
  649.     else if (obloc[dj] != 2000 + ZROBOT)
  650.         spk = 347;
  651.     else {
  652.         tloc = loc;
  653.         loc = obloc[ZROBOT];
  654.         itsher(ij, &iplce);
  655.         loc = tloc;
  656.         if (obloc[ZROBOT] == loc && obloc[ij] == 1000)
  657.         iplce = 6;
  658.         if (iplce < 4 || iplce > 6)
  659.         spk = 344;
  660.         else {
  661.         spk = 75;
  662.         obloc[dj] = 2000 + ij;
  663.         if (ij == ZMUD) {
  664.             spk = 407;
  665.             obloc[dj] = 0;
  666.         } else if (ij == FPIT) {
  667.             spk = 408;
  668.             obloc[dj] = 0;
  669.         } else if (ij == ZACID && (dj == GDISC || dj == BDISC)) {
  670.             spk = 413;
  671.             obloc[dj] = 0;
  672.         } else if (ij == GVAPOR && gvtim == 0 && dj == GDISC) {
  673.             spk = 409;
  674.             gvtim = 1;
  675.         } else if (ij == RVAPOR && dj == GDISC && rvtim == 0) {
  676.             spk = 409;
  677.             if (gvtim == 1)
  678.             rvtim = 1;
  679.         }
  680.         }
  681.     }
  682.     } else if (wrdnum[0] == IS && adverb == WHERE)
  683.     spk = 477;
  684.     else if (wrdnum[0] == IS && adverb == WHAT) {
  685.     if (dobjs[0] == COMBIN && (doadjs[0] == 0 || doadjs[0] == BOX))
  686.         spk = 476;
  687.     else if (doadjs[0] != 0)
  688.         spk = 342;
  689.     else if (dobjs[0] == DEET)
  690.         spk = 473;
  691.     else if (dobjs[0] == METOL)
  692.         spk = 474;
  693.     else if (dobjs[0] == HYPO)
  694.         spk = 475;
  695.     else
  696.         spk = 477;
  697.     } else
  698.     spk = 251;
  699.     if (spk != 0 && (obloc[ZROBOT] == loc || loc == 146)) {
  700.     speak(spk);
  701.     if (vspk != 0)
  702.         speak(301);
  703.     }
  704. }
  705.  
  706. vshit()
  707. {
  708.     dirty += 1;
  709.     {
  710.     if (loc == 74 && (obimpr[ZVINE] & 56) == 8)
  711.         speak(303);
  712.     else if (dirty >= 5 && dirty < 10)
  713.         speak(40);
  714.     else if (dirty >= 10)
  715.         if (obloc[LPANT] == 3000 || obloc[RPANT] == 3000)
  716.         speak(43);
  717.         else
  718.         speak(42);
  719.     }
  720. }
  721.  
  722. vshoot()
  723. {
  724.     int             spk, plce;
  725.     spk = 0;
  726.     itsher(ICAMER, &plce);
  727.     /* camera isn't here  */
  728.  
  729.     if (plce != 1 && plce != 4)
  730.     spk = 114;
  731.     /* see if film is fogged   */
  732.  
  733.     else if (oextim == 8192)
  734.     spk = 237;
  735.     else if (oextim >= 45) {
  736.     spk = 320;
  737.     obloc[OPHOTO] = loc;
  738.     obimpr[OPHOTO] += 64;
  739.     oextim = 8192;
  740.     }
  741.     /* shot the pterodactyls */
  742.  
  743.     else if (loc == 89 || loc == 68 || loc == 62)
  744.     spk = 382;
  745.     else if (loc == 24) {
  746.     if (obloc[PPHOTO] != 0)
  747.         spk = 115;
  748.     else {
  749.         spk = 116;
  750.         obloc[PPHOTO] = loc;
  751.     }
  752.     }
  753.     /* phograph the martians at the bar  */
  754.  
  755.     else if (loc == 30 && marflg[0]) {
  756.     if (obloc[MPHOTO] != 0)
  757.         spk = 135;
  758.     else {
  759.         spk = 134;
  760.         obloc[MPHOTO] = loc;
  761.     }
  762.     }
  763.     /* shoot the hockey game  */
  764.  
  765.     else if (((loc >= 31 && loc <= 38) || loc == 29) && marflg[1]) {
  766.     if (obloc[MPHOTO] != 0)
  767.         spk = 135;
  768.     else {
  769.         spk = 134;
  770.         obloc[MPHOTO] = loc;
  771.         obimpr[MPHOTO] += 64;
  772.     }
  773.     }
  774.     /* martians, alone aren't too interesting */
  775.  
  776.     else if ((loc == 28 && marflg[3]) ||
  777.          (loc == 40 && marflg[2]) ||
  778.          (loc >= 43 && loc <= 45 && marflg[4]))
  779.     spk = 140;
  780.     else if (loc == 131) {
  781.     if (obloc[FPHOTO] != 0)
  782.         spk = 115;
  783.     else {
  784.         spk = 318;
  785.         obloc[FPHOTO] = loc;
  786.         obimpr[FPHOTO] += 64;
  787.     }
  788.     } else if (loc == 100) {
  789.     if (obloc[APHOTO] != 0)
  790.         spk = 115;
  791.     else {
  792.         spk = 319;
  793.         obloc[APHOTO] = loc;
  794.         obimpr[APHOTO] += 64;
  795.     }
  796.     } else
  797.     spk = 117;
  798.     if (spk != 0)
  799.     speak(spk);
  800. }
  801.  
  802. vshut()
  803. {
  804.     int             spk, n, plce;
  805.     if (prepdo != 0 && prepio != 0)
  806.     spk = 21;
  807.     /* the door to the bar is always open  */
  808.  
  809.     else if ((loc == 30 || loc == 42) && dobjs[0] == DOOR)
  810.     spk = 224;
  811.     /* doors or containers must be openable, and not already shut  */
  812.  
  813.     else {
  814.     n = getobj(dobjs[0], doadjs[0]);
  815.     if (dobjs[0] == DOOR && (loc == 184 || loc == 187 ||
  816.                  (loc >= 176 && loc <= 181)))
  817.         n = BDOOR;
  818.     if (n < 0)
  819.         spk = 70;
  820.     else if (n == 0)
  821.         spk = 66;
  822.     else if ((obpprp[n] % 2) != 1) {
  823.         if (obpprp[n] / 2048 != 0)
  824.         spk = 254;
  825.         else
  826.         spk = 230;
  827.     } else {
  828.         itsher(n, &plce);
  829.         if (dobjs[0] == DOOR && (loc == 184 || loc == 187 ||
  830.                      (loc >= 176 && loc <= 181)))
  831.         plce = 5;
  832.         if (plce <= 0) {
  833.         if (dobjs[0] == DOOR)
  834.             spk = 225;
  835.         else
  836.             spk = 66;
  837.         } else if ((obimpr[n] & 2) == 2) {
  838.         if (dobjs[0] == DOOR)
  839.             spk = 227;
  840.         else
  841.             spk = 390;
  842.         } else {
  843.         spk = 232;
  844.         obimpr[n] |= 2;
  845.         if (n == RDOOR || n == MDOOR || n == GDOOR || n == ODOOR
  846.             || n == BDOOR)
  847.             obimpr[n] -= 8;
  848.         if (n == ZBOX) {
  849.             obimpr[ZBOX] |= 4;
  850.             dial1 = 0;
  851.             dial2 = 0;
  852.         }
  853.         }
  854.     }
  855.     }
  856.     speak(spk);
  857. }
  858.  
  859. vsit()
  860. {
  861.     int             spk;
  862.     /* sit is usually a joke */
  863.  
  864.     if (dobjs[0] == 0 && prepdo == DOWN) {
  865.     if (loc == 166 || loc == 184 || loc == 187 ||
  866.                                          (loc <= 181 && loc >= 175)) {
  867.         spcloc = 2;
  868.         spk = 510;
  869.     } else
  870.         spk = 220;
  871.     } else if (prepdo != IN && prepdo != ON)
  872.     spk = 21;
  873.     else if (prepdo == IN && dobjs[0] == CHAIR && (loc == 166
  874.                   || loc == 184 || (loc <= 181 && loc >= 175) ||
  875.                            loc == 187)) {
  876.     spcloc = 2;
  877.     spk = 510;
  878.     } else if ((dobjs[0] == TREE || dobjs[0] == LOG || dobjs[0] ==
  879.         BOULDE) && prepdo == ON)
  880.     spk = 220;
  881.     else if ((prepdo == ON || prepdo == IN) && (dobjs[0] == STOOL
  882.                    || dobjs[0] == STOOLS || dobjs[0] == BOWL)) {
  883.     /* except the case of sitting on electric seat  */
  884.  
  885.     if (loc == 42)
  886.         spk = 221;
  887.     else if (loc == 28)
  888.         spk = 222;
  889.     /* sit in bowl, when at hockey rink, slides him in it */
  890.  
  891.     else if (dobjs[0] == BOWL && (loc >= 32 && loc <= 38)) {
  892.         loc = 38;
  893.         spk = 75;
  894.         oldloc = 0;
  895.         oldlc2 = 0;
  896.     } else if (dobjs[0] == BOWL)
  897.         spk = 156;
  898.     else
  899.         spk = 71;
  900.     } else
  901.     spk = 48;
  902.     speak(spk);
  903. }
  904. vstand()
  905. {
  906.     int             spk;
  907.     if (dobjs[0] == 0 && prepdo == UP) {
  908.     if (spcloc == 2) {
  909.         spcloc = 0;
  910.         spk = 511;
  911.     } else
  912.         spk = 208;
  913.     } else if (prepdo != ON)
  914.     spk = 94;
  915.     else if (dobjs[0] == TREE || dobjs[0] == LOG && (loc >= 4 &&
  916.               loc <= 19 && loc != 16 && loc != 13 && loc != 14))
  917.     spk = 209;
  918.     /* stand on glass plate  */
  919.  
  920.     else if (dobjs[0] == GLASS) {
  921.     if (obloc[PGLASS] == 1000 || obloc[PGLASS] == 3000)
  922.         spk = 211;
  923.     else if (obloc[PGLASS] != loc)
  924.         spk = 66;
  925.     else {
  926.         spk = 75;
  927.         spcloc = 1;
  928.     }
  929.     } else
  930.     spk = 210;
  931.     speak(spk);
  932. }
  933.  
  934.  
  935. vtake()
  936. {
  937.     int             i, spk, xiobj, qq, xplce, kplce, ncarrd, kcarrd;
  938.     int             nweigh, kweigh, ambig, z, plce, plural, t, kkwr;
  939.     spk = 0;
  940.     if (prepdo != 0 && prepio != 0)
  941.     spk = 48;
  942.  
  943.     /* remove clothing means take off  */
  944.  
  945.     if (wrdnum[0] == REMOVE && prepdo == 0) {
  946.     qq = getobj(dobjs[0], doadjs[0]);
  947.     if (qq > 0 && obloc[qq] == 3000)
  948.         prepdo = OFF;
  949.     }
  950.     xiobj = getobj(iobj, ioadj);
  951.     if (xiobj == ZKNAPS)
  952.     itsher(ZKNAPS, &kplce);
  953.     /* handle remove something from container */
  954.  
  955.     if (prepio == FROM) {
  956.     if (obpprp[xiobj] / 2048 == 0)
  957.         spk = 77;
  958.     else {
  959.         itsher(xiobj, &xplce);
  960.         if (xplce == 0)
  961.         spk = 78;
  962.     }
  963.     }
  964.     if (spk != 0) {
  965.     speak(spk);
  966.     return;
  967.     }
  968.     /* handle multiple objects   */
  969.  
  970.     ambig = !cnvobj();
  971.     if (butflg && ambig)
  972.     return;
  973.     if (allflg)
  974.     getall();
  975.  
  976.     /* check weight  */
  977.  
  978.     burden(&ncarrd, &nweigh, &kcarrd, &kweigh);
  979.     if (obloc[ZKNAPS] == 1000 || obloc[ZKNAPS] == 3000)
  980.     nweigh = nweigh + kweigh;
  981.     for (i = 0; i < 30; i++) {
  982.     z = dobjs[i];
  983.     if (z == 0)
  984.         return;
  985.     plural = (obpprp[z] & 256) == 256;
  986.     if (z > MOVMAX) {
  987.         if (!allflg) {
  988.         speak(odistb[z]);
  989.         itsher(z, &plce);
  990.         if (plce == 4)
  991.             spk = odistb[z + 1] - 1;
  992.         else {
  993.             if (plural)
  994.             spk = 185;
  995.             else
  996.             spk = 66;
  997.         }
  998.         xindnt += 2;
  999.         speak(spk);
  1000.         xindnt -= 2;
  1001.         }
  1002.         continue;
  1003.     }
  1004.     itsher(z, &plce);
  1005.     if (allflg && (plce == 0 || plce == 1 || (prepdo ==
  1006.                 OFF && plce != 2) || (prepio == FROM && xiobj ==
  1007.                    ZKNAPS && (obloc[z] != (2000 + ZKNAPS) ||
  1008.         kplce == 0)) || (prepio == 0 && obloc[z] == (2000 + ZKNAPS))
  1009.                || (plce == 2 && prepdo != OFF)))
  1010.         continue;
  1011.     /* emit name of object if "all" or multiple */
  1012.  
  1013.     if (dobjs[1] != 0 || allflg || ambig)
  1014.         speak(odistb[z]);
  1015.     if (prepdo == 0) {
  1016.         /*
  1017.          * the wire is very,very special... don't even try to figure it
  1018.          * out!!! *************************************************** 
  1019.              */
  1020.  
  1021.  
  1022.         if (plce == 1 || (z == ZWIRE && wirelc[5] == 1000
  1023.                   && wirelc[0] != 1000)) {
  1024.         spk = 67;
  1025.         if (plural)
  1026.             spk = 186;
  1027.         } else if (plce == 0 && !(z == ZWIRE && (wirelc[4]
  1028.                   == loc || wirelc[3] == loc || wirelc[2] == loc
  1029.                 || wirelc[1] == loc || wirelc[0] == loc))) {
  1030.         spk = 66;
  1031.         if (plural)
  1032.             spk = 185;
  1033.         if (z == RBOULD && loc == 27)
  1034.             spk = 153;
  1035.         if (z == GMOSS && loc == 19)
  1036.             spk = 243;
  1037.         if (z == PGLASS && (loc == 30 || loc == 42))
  1038.             spk = 247;
  1039.         if ((z == PPHOTO && loc == 24) || (z == MPHOTO &&
  1040.                            loc >= 26 && loc <= 50))
  1041.             spk = 249;
  1042.         } else if (plce == 2) {
  1043.         spk = 68;
  1044.         if (plural)
  1045.             spk = 187;
  1046.         } else if (prepio == WITH && (z != CFISH ||
  1047.                       xiobj != BNET))
  1048.         spk = 48;
  1049.         else if (prepio == FROM && !((z == CKEY &&
  1050.                 iobj == SPIRE && ioadj == 0) || (obloc[z] ==
  1051.             (2000 + xiobj)) || (z == ZWIRE && ((iobj == ZKNOB &&
  1052.                     (obimpr[ZWIRE] & ~56) == 32) || (iobj ==
  1053.                   ZTOWER && (obimpr[ZWIRE] & -57) == 24)))))
  1054.         /* ~56=177707 octal  */
  1055.  
  1056.         spk = 71;
  1057.         else if (ncarrd > 5)
  1058.         spk = 72;
  1059.         else if (nweigh + obw3[z] / 256 > 125) {
  1060.         spk = 79;
  1061.         if (plural)
  1062.             spk = 188;
  1063.         }
  1064.         /* take fish (from sea) with net.  */
  1065.  
  1066.         else if (z == CFISH && loc == 16 &&
  1067.              (prepio != WITH || xiobj != BNET))
  1068.         spk = 80;
  1069.         /* prevent him from killing wish in watery bag  */
  1070.  
  1071.         else if (z == CFISH && obloc[z] ==
  1072.              (2000 + PLBAG) && (obimpr[PLBAG] / 512 == 5))
  1073.         spk = 76;
  1074.         /* cannot take latex if still liquid   */
  1075.  
  1076.         else if (z == ZLATEX && (obimpr[z] & 56) == 8)
  1077.         spk = 268;
  1078.         /* cant remove cartridge from slot  */
  1079.  
  1080.         else if (z == ZCART && obloc[ZCART] == 2000 + RSLOT)
  1081.         spk = 311;
  1082.         /* cant take statue unless ferrets blinded  */
  1083.  
  1084.         else if (loc == 99 && z == ZSTATU
  1085.              && obimpr[ZSEED] != 2 && obimpr[ZSEED] != 1)
  1086.         spk = 405;
  1087.         /* diamond must land on moss to be safe   */
  1088.  
  1089.         else if (z == ZDIAMO && loc == 49) {
  1090.         if (obloc[GMOSS] == 48) {
  1091.             spk = 165;
  1092.             obloc[z] = 48;
  1093.             obimpr[z] += 8;
  1094.         } else {
  1095.             spk = 164;
  1096.             obloc[z] = 0;
  1097.         }
  1098.         } else if (z == ZSEED && loc == 86 && obloc[ZSEED] == 86 &&
  1099.                !(obloc[RPANT] == 3000 && obloc[RSHIRT] == 3000)) {
  1100.         if (obloc[LPANT] == 3000 || obloc[GSHIRT] == 3000) {
  1101.             if (daytim == 1)
  1102.             speak(424);
  1103.             else
  1104.             speak(425);
  1105.         } else {
  1106.             if (daytim == 1)
  1107.             speak(426);
  1108.             else
  1109.             speak(427);
  1110.         }
  1111.         if (obloc[LPANT] == 3000)
  1112.             obloc[LPANT] = 0;
  1113.         if (obloc[GSHIRT] == 3000)
  1114.             obloc[GSHIRT] = 0;
  1115.         vdead();
  1116.         return;
  1117.         } else {
  1118.         nweigh = nweigh + obw3[z] / 256;
  1119.         ncarrd += 1;
  1120.         if (z == ZKNAPS) {
  1121.             spk = 87;
  1122.             obloc[z] = 3000;
  1123.         }
  1124.         /* specail code for wire  */
  1125.  
  1126.         else {
  1127.             spk = 81;
  1128.             if (z == ZWIRE) {
  1129.             if (obloc[ZWIRE] == loc) {
  1130.                 obimpr[ZWIRE] = (obimpr[ZWIRE] & ~56) + 8;
  1131.                 if (wirelc[0] == 0)
  1132.                 obloc[z] = 1000;
  1133.                 /*
  1134.                  * if he takes fastened end, all the pointers must
  1135.                  * have their order reversed  
  1136.                              */
  1137.  
  1138.                 else {
  1139.                 t = obloc[z];
  1140.                 obloc[z] = wirelc[4];
  1141.                 wirelc[4] = t;
  1142.                 t = wirelc[3];
  1143.                 wirelc[3] = wirelc[0];
  1144.                 wirelc[0] = t;
  1145.                 t = wirelc[2];
  1146.                 wirelc[2] = wirelc[1];
  1147.                 wirelc[1] = t;
  1148.                 wirelc[5] = 1000;
  1149.                 if (obloc[ZWIRE] == 1000)
  1150.                     goto lab240;
  1151.             lab239:
  1152.                 if (obloc[z] != wirelc[0])
  1153.                     goto lab240;
  1154.                 obloc[ZWIRE] = wirelc[0];
  1155.                 for (kkwr = 0; kkwr < 5; kkwr++)
  1156.                     wirelc[kkwr] = wirelc[kkwr + 1];
  1157.                 goto lab239;
  1158.                 /*
  1159.                  * if it's all coiled up, i.e. all the
  1160.                  * wirelc's are 1000, clear wirelc   
  1161.                                  */
  1162.  
  1163.             lab240:
  1164.                 if (wirelc[0] == 1000) {
  1165.                     for (kkwr = 0; kkwr < 6; kkwr++)
  1166.                     wirelc[kkwr] = 0;
  1167.                 }
  1168.                 }
  1169.             } else if (wirelc[5] == loc) {
  1170.                 /*
  1171.                  * if pick up far end of wire, 1000(held by him)
  1172.                  * propagates back from end of wirelc  
  1173.                              */
  1174.  
  1175.                 for (kkwr = 1; kkwr <= 5; kkwr++) {
  1176.                 if (wirelc[6 - kkwr] == loc &&
  1177.                                              wirelc[5 - kkwr] == loc)
  1178.                                                        wirelc[6 - kkwr] = 1000;
  1179.                 }
  1180.                 if (wirelc[0] == loc && obloc[ZWIRE] == loc)
  1181.                 wirelc[0] = 1000;
  1182.             } else
  1183.                 spk = 214;
  1184.             if (wirelc[0] == 1000 && obloc[ZWIRE] == 1000) {
  1185.                 for (kkwr = 0; kkwr < 6; kkwr++)
  1186.                 wirelc[kkwr] = 0;
  1187.             }
  1188.             } else {
  1189.             /*******    the actual taking occurs here  */
  1190.  
  1191.             if (obloc[z] == 2000 + RSLOT)
  1192.                 obimpr[ZSCREE] = 9;
  1193.             obloc[z] = 1000;
  1194.             if (z == ZLATEX)
  1195.                 obimpr[z] = 337;
  1196.             }
  1197.         }
  1198.         /* special message for seed  */
  1199.  
  1200.         if (loc == 86 && z == ZSEED) {
  1201.             if (daytim == 1)
  1202.             spk = 428;
  1203.             else
  1204.             spk = 429;
  1205.         }
  1206.         /* actual fish taking from sea occurs here  */
  1207.  
  1208.         if (dobjs[i] == CFISH && loc == 16) {
  1209.             if (obloc[BNET] == 1000)
  1210.             obloc[CFISH] = 2000 + BNET;
  1211.             else
  1212.             spk = 91;
  1213.         }
  1214.         /*
  1215.          * special increment of descriptor pointer if obimpr has 4096
  1216.          * set 
  1217.                  */
  1218.  
  1219.         if (obimpr[z] / 4096 == 1)
  1220.             obimpr[z] = (obimpr[z] & ~4096) + 8;
  1221.         /* ~4096=167777 octal  */
  1222.  
  1223.         }
  1224.     } else {
  1225.         /*
  1226.          * the prepdo is off take off clothes only  
  1227.              */
  1228.  
  1229.         if (plce == 2) {
  1230.         obloc[z] = loc;
  1231.         spk = 82;
  1232.         } else if ((obpprp[z] & 64) != 64)
  1233.         spk = 71;
  1234.         else {
  1235.         spk = 83;
  1236.         if (plural)
  1237.             spk = 189;
  1238.         }
  1239.     }
  1240.     xindnt += 2;
  1241.     speak(spk);
  1242.     xindnt -= 2;
  1243.     }
  1244. }
  1245.  
  1246.  
  1247. vthrow()
  1248. {
  1249.     int             xobj, result, plce, kobj;
  1250.     result = 0;
  1251.     /* if vthrow remains false, must call vdrop  */
  1252.  
  1253.     xobj = getobj(dobjs[0], doadjs[0]);
  1254.     if (xobj <= 0 || xobj > MOVMAX) {
  1255.     speak(71);
  1256.     result = 0;
  1257.     return (result);
  1258.     }
  1259.     itsher(xobj, &plce);
  1260.     if (plce == 0) {
  1261.     if ((obpprp[xobj] & 256) == 256)
  1262.         speak(185);
  1263.     else
  1264.         speak(66);
  1265.     result = 1;
  1266.     return (result);
  1267.     }
  1268.     /* throw things at the shimmering barrier  */
  1269.  
  1270.     if ((loc == 26 || loc == 27) && prepio != OUT &&
  1271.     iobj == BARRIE && dobjs[0] != WIRE && dobjs[0] != FISH) {
  1272.     speak(172);
  1273.     obloc[xobj] = loc;
  1274.     result = 1;
  1275.     }
  1276.     /* throwing things at martians is not allowed  */
  1277.  
  1278.     else if ((loc >= 27 && loc <= 51) && daytim == 0 &&
  1279.          (prepio == AT || prepio == TO) && iobj == MARTIA) {
  1280.     speak(178);
  1281.     result = 1;
  1282.     /*
  1283.      * the window, or the glass, can't be broken by throwing things at it 
  1284.          */
  1285.  
  1286.     } else if ((prepio == THROUG || prepio == AT) && (iobj == WINDOW
  1287.                               || iobj == GLASS)) {
  1288.     if (loc != 30 && loc != 42)
  1289.         speak(200);
  1290.     else if (xobj == ZSEED) {
  1291.         speak(337);
  1292.         obloc[xobj] = 0;
  1293.         obimpr[ZSEED] = 0;
  1294.     } else if (obloc[PGLASS] != 0) {
  1295.         speak(240);
  1296.         obloc[xobj] = 42;
  1297.         if (loc == 42)
  1298.         obloc[xobj] = 30;
  1299.     } else if (xobj == RBOULD) {
  1300.         speak(241);
  1301.         obloc[xobj] = loc;
  1302.     } else {
  1303.         speak(242);
  1304.         obloc[xobj] = loc;
  1305.     }
  1306.     result = 1;
  1307.     /*
  1308.      * throwing other things results in a joke (usually)  
  1309.          */
  1310.  
  1311.     } else if (prepio == AT && ((iobj == FERRET && (loc == 99 || loc ==
  1312.               100 || loc == 131)) || (iobj == BEES && loc == 87))) {
  1313.     prepio = 0;
  1314.     iobj = 0;
  1315.     ioadj = 0;
  1316.     } else if (prepio == AT) {
  1317.     if (iobj == ROBOT || iobj == FERRET)
  1318.         speak(285);
  1319.     else if (iobj == GUARD) {
  1320.         if (loc == guardl || loc == 171 || (chaset != 0 &&
  1321.                         chaset <= 9))
  1322.         speak(562);
  1323.         else
  1324.         speak(561);
  1325.     } else if (iobj == VINE && loc == 74) {
  1326.         speak(308);
  1327.         obloc[xobj] = loc;
  1328.     } else {
  1329.         kobj = getobj(iobj, ioadj);
  1330.         if (kobj <= 0)
  1331.         speak(71);
  1332.         else;
  1333.         speak(48);
  1334.     }
  1335.     return (1);
  1336.     }
  1337.     return (result);
  1338. }
  1339.  
  1340. vturn()
  1341. {
  1342.     int             numbr;
  1343.     if ((dobjs[0] == RA || dobjs[0] == DECLIN) && ((loc >= 175
  1344.                  && loc <= 181) || loc == 184 || loc == 187)
  1345.     && prepio == TO && iobj > 9999) {
  1346.     numbr = iobj - 10000;
  1347.     if (dobjs[0] == RA)
  1348.         raset = numbr;
  1349.     if (dobjs[0] == DECLIN)
  1350.         decset = numbr;
  1351.     if (lpill == 1)
  1352.         speak(533);
  1353.     return;
  1354.     }
  1355.     if ((dobjs[0] == LIGHT || dobjs[0] == MACHIN) && (prepdo ==
  1356.                               ON || prepdo == OFF)) {
  1357.     speak(391);
  1358.     return;
  1359.     } else if (dobjs[0] != DIAL)
  1360.     speak(387);
  1361.     else {
  1362.     if (doadjs[0] != LEFT && doadjs[0] != RIGHT)
  1363.         speak(392);
  1364.     else if (prepio == 0 && iobj == 0)
  1365.         speak(393);
  1366.     else if (prepio != TO || iobj < 9999)
  1367.         speak(28);
  1368.     else if (iobj < 10000 || iobj > 10999)
  1369.         speak(394);
  1370.     else if (doadjs[0] == LEFT)
  1371.         dial1 = iobj - 10000;
  1372.     else
  1373.         dial2 = iobj - 10000;
  1374.     }
  1375.     if (dial1 == dial1x && dial2 == dial2x && (obimpr[ZBOX] & 6) == 6) {
  1376.     speak(395);
  1377.     obimpr[ZBOX] -= 6;
  1378.     }
  1379. }
  1380. vwash()
  1381. {
  1382.     int             bplce, n, nplce;
  1383.     itsher(ZBUCKE, &bplce);
  1384.     if ((locdat[loc] & 1024) == 0 && (bplce == 0 || obimpr[ZBUCKE] != 1033)) {
  1385.     speak(74);
  1386.     return;
  1387.     }
  1388.     n = getobj(dobjs[0], doadjs[0]);
  1389.     if (n < 0)
  1390.     speak(70);
  1391.     else if (n == 0)
  1392.     speak(28);
  1393.     else {
  1394.     itsher(n, &nplce);
  1395.     if (nplce == 0) {
  1396.         if ((obimpr[n] & 256) != 0)
  1397.         speak(185);
  1398.         else
  1399.         speak(89);
  1400.     } else if (n == GDISC && rvtim == 0)
  1401.         speak(414);
  1402.     else if (n == GDISC && rvtim == 1) {
  1403.         speak(410);
  1404.         rvtim = 2;
  1405.     } else
  1406.         speak(336);
  1407.     }
  1408. }
  1409.  
  1410. vwear()
  1411. {
  1412.     int             ambig, i, d, plural, plce, spk;
  1413.     /* wear clothes  */
  1414.  
  1415.     ambig = !cnvobj();
  1416.     if (allflg || ambig) {
  1417.     speak(84);
  1418.     return;
  1419.     }
  1420.     for (i = 0; i < 30; i++) {
  1421.     d = dobjs[i];
  1422.     if (d == 0)
  1423.         continue;
  1424.     plural = (obpprp[d] & 256) == 256;
  1425.     if (d != ZDEET)
  1426.         speak(odistb[d]);
  1427.     itsher(d, &plce);
  1428.     if (plce == 0) {
  1429.         spk = 66;
  1430.         if (plural)
  1431.         spk = 185;
  1432.     } else if (plce == 2) {
  1433.         spk = 68;
  1434.         if (plural)
  1435.         spk = 147;
  1436.     } else if ((obpprp[d] & 64) != 64 && d != ZDEET)
  1437.         spk = 85;
  1438.     else if ((d == RPANT && obloc[LPANT] == 3000) ||
  1439.          (d == LPANT && obloc[RPANT] == 3000) ||
  1440.          (d == RSHIRT && obloc[GSHIRT] == 3000) ||
  1441.          (d == GSHIRT && obloc[RSHIRT] == 3000) ||
  1442.          (d == HBOOTS && obloc[CSHOES] == 3000) ||
  1443.          (d == CSHOES && obloc[HBOOTS] == 3000))
  1444.         spk = 86;
  1445.     else {
  1446.         if (d == ZDEET) {
  1447.         spk = 75;
  1448.         obimpr[ZDEET] = 28672;
  1449.         obloc[ZDEET] = 0;
  1450.         } else {
  1451.         spk = 87;
  1452.         if (plural)
  1453.             spk = 190;
  1454.         obloc[d] = 3000;
  1455.         /*
  1456.          * taking key changes descriptor ~4152=167707 octal  
  1457.                  */
  1458.  
  1459.         if (d == CKEY)
  1460.             obimpr[d] = (obimpr[d] & ~4152) + 16;
  1461.         }
  1462.     }
  1463.     xindnt += 2;
  1464.     speak(spk);
  1465.     xindnt -= 2;
  1466.     }
  1467. }
  1468.  
  1469.